package com.navinfo.tripanalysis.common.arithmetic.convert;

import com.navinfo.tripanalysis.common.arithmetic.common.InterCrossCity;
import com.navinfo.tripanalysis.common.arithmetic.common.InterRangeData;
import com.navinfo.tripanalysis.common.arithmetic.common.OuterStatisticData;
import com.navinfo.tripanalysis.common.util.GsonUtils;
import com.navinfo.tripanalysis.common.util.JsonUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.Metadata;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * 行程数据与Parquet格式的转换
 *
 * @author 沈东生
 */
public class StatisticDataParquetConvert {
    /**
     * 创建Schema
     *
     * @return
     */
    public static StructType createSchema() {
        List<StructField> list = new ArrayList<>();
        /*--start_schema*/
        list.add(new StructField("uid", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("tid", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("trip_id", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_start_time", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("route_start_lc", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_start_latitude", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_start_longitude", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_start_height", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_start_direction", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_start_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_start_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_end_time", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("route_end_lc", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_end_latitude", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_end_longitude", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_end_height", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_end_direction", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_end_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_end_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_integral_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_integral_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_power", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("stype", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("route_stop_flag", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cross_day_flag", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("force_end_flag", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_useful_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_useful_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("in_gear_coast_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("in_gear_coast_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("in_gear_coast_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("brake_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("brake_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("brake_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_estimated_load", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("parking_power_on_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("city_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("city_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("city_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rural_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rural_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rural_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("eco_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("eco_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("eco_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("up_slope_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("up_slope_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("up_slope_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("down_slope_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("down_slope_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("down_slope_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("level_road_driving_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("level_road_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("level_road_driving_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cruise_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cruise_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cruise_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("shift_gears_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_step_on_gas_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_step_on_gas_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_step_on_gas_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_step_on_gas_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_park_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_start_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_start_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_start_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_start_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_cold_start_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_cold_start_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_cold_start_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vehicle_cold_start_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("charge_fuel_percent", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("charge_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("leak_fuel_percent", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("leak_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_stability_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_stability_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent_sum", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range01_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range01_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range01_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range02_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range02_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range02_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range03_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range03_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range03_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range04_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range04_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range04_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range05_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range05_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range05_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range06_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range06_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range06_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range07_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range07_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range07_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range08_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range08_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range08_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range09_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range09_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range09_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range10_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range10_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range10_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range11_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range11_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range11_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range12_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range12_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("speed_range12_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("exceed_speed_range_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("exceed_speed_range_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("exceed_speed_range_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("assist_brake_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("assist_brake_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fatigue_driving_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("park_throttle_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("park_throttle_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("engine_work_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("driving_handbrake_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("driving_handbrake_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("driving_handbrake_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_handbrake_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_handbrake_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear01_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear01_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear01_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear01_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear02_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear02_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear02_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear02_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear03_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear03_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear03_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear03_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear04_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear04_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear04_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear04_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear05_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear05_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear05_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear05_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear06_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear06_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear06_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear06_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear07_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear07_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear07_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear07_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear08_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear08_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear08_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear08_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear09_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear09_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear09_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear09_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear10_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear10_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear10_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear10_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear11_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear11_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear11_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear11_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear12_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear12_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear12_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear12_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear13_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear13_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear13_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear13_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear14_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear14_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear14_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear14_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear15_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear15_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear15_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear15_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear16_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear16_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear16_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear16_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear_other_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear_other_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear_other_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gear_other_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range500_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range500_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range500_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range600_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range600_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range600_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range700_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range700_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range700_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range800_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range800_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range800_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range900_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range900_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range900_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1000_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1000_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1000_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1100_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1100_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1200_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1200_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1200_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1300_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1300_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1300_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1400_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1400_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1400_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1500_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1500_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1500_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1600_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1600_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1600_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1700_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1700_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1700_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1800_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1800_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1800_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1900_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1900_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range1900_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2000_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2000_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2000_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2100_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2100_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2200_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2200_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2200_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2300_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2300_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2300_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2400_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2400_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2400_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2500_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2500_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2500_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2600_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2600_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2600_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2700_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2700_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2700_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2800_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2800_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2800_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2900_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2900_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range2900_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range3000_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range3000_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range3000_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range_over3000_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range_over3000_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_range_over3000_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("altitude_ranges", DataTypes.StringType, true, Metadata.empty()));
        list.add(new StructField("clock_ranges", DataTypes.StringType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp85_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp95_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp105_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp110_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp115_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp125_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp130_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp135_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp140_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp145_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp_over150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp85_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp95_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp105_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp110_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp115_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp125_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp130_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp135_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp140_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp145_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp_over150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_work_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_work_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp_sum", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("work_water_temp_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_idle_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_idle_water_temp", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp_sum", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("idle_water_temp_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent0_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent10_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent20_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent30_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent40_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent60_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent99_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("gas_open_percent100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque0_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque10_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque20_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque30_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque40_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque60_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque99_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_torque", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_torque", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("torque_sum", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("torque_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("no_idle_rpm_sum", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("no_idle_rpm_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("rpm_sum", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("rpm_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_rpm", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_rpm", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat85_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat95_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat105_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat110_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat115_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat125_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat130_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat135_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat140_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat145_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat_over150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("iat_sum", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("iat_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_iat", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_iat", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip50_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip60_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip70_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip80_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip100_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip110_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip130_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip140_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip_over150_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ip_sum", DataTypes.LongType, true, Metadata.empty()));
        list.add(new StructField("ip_count", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("max_ip", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("min_ip", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cross_cities", DataTypes.StringType, true, Metadata.empty()));
        list.add(new StructField("so90_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so90_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so90_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so120_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so120_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so120_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sr_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("lrog_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("hsb_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("hsb_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("hsb_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("csb_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("csb_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("csb_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("clutch_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("clutch_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("clutch_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_turning_number", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_turning_mil", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so90_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("so120_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fatigue_driving_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("precise_flag", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("wload_type", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cross_cities_detail", DataTypes.StringType, true, Metadata.empty()));

        //东风新增字段
        list.add(new StructField("fuel_100km", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_speed_noidle", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("avg_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("eco_proportion", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("brake_times", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，急加速
        list.add(new StructField("sharp_up_speed1_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed1_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed1_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_up_speed1_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，急减速
        list.add(new StructField("sharp_down_speed1_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed1_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed1_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("sharp_down_speed1_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，急转弯
        list.add(new StructField("sharp_turning1_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，超长怠速
        list.add(new StructField("long_idle_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("long_idle_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("long_idle_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，冷车运行
        list.add(new StructField("cold_running_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cold_running_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cold_running_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("cold_running_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，夜晚开车
        list.add(new StructField("night_running_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("night_running_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("night_running_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("night_running_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，引擎高转速
        list.add(new StructField("high_rotation_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("high_rotation_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("high_rotation_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("high_rotation_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，大油门
        list.add(new StructField("large_gas_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("large_gas_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("large_gas_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("large_gas_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，全油门
        list.add(new StructField("full_gas_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("full_gas_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("full_gas_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("full_gas_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，高速行驶
        list.add(new StructField("fast_speed_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fast_speed_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fast_speed_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("fast_speed_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，空档滑行
        list.add(new StructField("neutral_gear_coast1_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast1_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast1_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("neutral_gear_coast1_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，熄火滑行
        list.add(new StructField("flameout_coast_mileage", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("flameout_coast_fuel", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("flameout_coast_duration", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("flameout_coast_number", DataTypes.IntegerType, true, Metadata.empty()));
        //东风新增，载重
        list.add(new StructField("amt_load", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("vecu_load", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("load_type", DataTypes.IntegerType, true, Metadata.empty()));
        //行程打分
        list.add(new StructField("totalScore", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("safeScore", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("ecoScore", DataTypes.IntegerType, true, Metadata.empty()));

        list.add(new StructField("gas_open_percent0_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent10_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent20_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent30_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent40_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent50_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent60_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent70_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent80_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent90_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent99_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent100_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent0_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent10_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent20_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent30_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent40_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent50_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent60_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent70_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent80_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent90_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent99_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("gas_open_percent100_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque0_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque10_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque20_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque30_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque40_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque50_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque60_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque70_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque80_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque90_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque99_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque100_mileage",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque0_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque10_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque20_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque30_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque40_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque50_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque60_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque70_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque80_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque90_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque99_fuel",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("torque100_fuel",DataTypes.IntegerType,true,Metadata.empty()));

        //东风 新增按仪表速度计算的怠速次数、油耗、时长字段
        list.add(new StructField("idle_fuel_instrument_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_duration_instrument_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("idle_number_instrument_speed", DataTypes.IntegerType, true, Metadata.empty()));
        list.add(new StructField("trip_urea",DataTypes.IntegerType,true,Metadata.empty()));
        list.add(new StructField("urea_100km",DataTypes.LongType,true,Metadata.empty()));
        list.add(new StructField("urea_fuel_ratio",DataTypes.LongType,true,Metadata.empty()));

        /*--end_schema*/

        return new StructType(list.toArray(new StructField[list.size()]));
    }

    /**
     * 创建一行数据
     *
     * @param m
     * @param schema
     * @return
     */
    public static Row createRow(OuterStatisticData m, StructType schema) {
        List<Object> list = new ArrayList<>();
        /*--start_row*/
        list.add(m.getUid());
        list.add(m.getTid());
        list.add(m.getTripId());
        list.add(m.getRouteStartTime());
        list.add(m.getRouteStartLc());
        list.add(m.getRouteStartLatitude());
        list.add(m.getRouteStartLongitude());
        list.add(m.getRouteStartHeight());
        list.add(m.getRouteStartDirection());
        list.add(m.getRouteStartMileage());
        list.add(m.getRouteStartFuel());
        list.add(m.getRouteEndTime());
        list.add(m.getRouteEndLc());
        list.add(m.getRouteEndLatitude());
        list.add(m.getRouteEndLongitude());
        list.add(m.getRouteEndHeight());
        list.add(m.getRouteEndDirection());
        list.add(m.getRouteEndMileage());
        list.add(m.getRouteEndFuel());
        list.add(m.getRouteIntegralMileage());
        list.add(m.getRouteIntegralFuel());
        list.add(m.getTripPower());
        list.add(m.getStype());
        list.add(m.getTripMileage());
        list.add(m.getTripFuel());
        list.add(m.getTripDuration());
        list.add(m.getRouteStopFlag());
        list.add(m.getCrossDayFlag());
        list.add(m.getForceEndFlag());
        list.add(m.getMaxSpeed());
        list.add(m.getMinSpeed());
        list.add(m.getMaxUsefulSpeed());
        list.add(m.getMinUsefulSpeed());
        list.add(m.getInGearCoastMileage());
        list.add(m.getInGearCoastDuration());
        list.add(m.getInGearCoastNumber());
        list.add(m.getBrakeNumber());
        list.add(m.getBrakeMileage());
        list.add(m.getBrakeDuration());
        list.add(m.getVehicleEstimatedLoad());
        list.add(m.getNeutralGearCoastDuration());
        list.add(m.getNeutralGearCoastFuel());
        list.add(m.getNeutralGearCoastMileage());
        list.add(m.getNeutralGearCoastNumber());
        list.add(m.getIdleFuel());
        list.add(m.getIdleDuration());
        list.add(m.getIdleNumber());
        list.add(m.getParkingPowerOnDuration());
        list.add(m.getCityDrivingMileage());
        list.add(m.getCityDrivingDuration());
        list.add(m.getCityDrivingFuel());
        list.add(m.getRuralDrivingMileage());
        list.add(m.getRuralDrivingDuration());
        list.add(m.getRuralDrivingFuel());
        list.add(m.getEcoDrivingMileage());
        list.add(m.getEcoDrivingDuration());
        list.add(m.getEcoDrivingFuel());
        list.add(m.getUpSlopeDrivingMileage());
        list.add(m.getUpSlopeDrivingDuration());
        list.add(m.getUpSlopeDrivingFuel());
        list.add(m.getDownSlopeDrivingMileage());
        list.add(m.getDownSlopeDrivingDuration());
        list.add(m.getDownSlopeDrivingFuel());
        list.add(m.getLevelRoadDrivingMileage());
        list.add(m.getLevelRoadDrivingDuration());
        list.add(m.getLevelRoadDrivingFuel());
        list.add(m.getCruiseMileage());
        list.add(m.getCruiseDuration());
        list.add(m.getCruiseFuel());
        list.add(m.getShiftGearsNumber());
        list.add(m.getSharpDownSpeedDuration());
        list.add(m.getSharpDownSpeedMileage());
        list.add(m.getSharpDownSpeedNumber());
        list.add(m.getSharpUpSpeedDuration());
        list.add(m.getSharpUpSpeedMileage());
        list.add(m.getSharpUpSpeedNumber());
        list.add(m.getSharpUpSpeedFuel());
        list.add(m.getSharpStepOnGasMileage());
        list.add(m.getSharpStepOnGasDuration());
        list.add(m.getSharpStepOnGasFuel());
        list.add(m.getSharpStepOnGasNumber());
        list.add(m.getVehicleParkNumber());
        list.add(m.getVehicleStartNumber());
        list.add(m.getVehicleStartMileage());
        list.add(m.getVehicleStartDuration());
        list.add(m.getVehicleStartFuel());
        list.add(m.getVehicleColdStartNumber());
        list.add(m.getVehicleColdStartMileage());
        list.add(m.getVehicleColdStartDuration());
        list.add(m.getVehicleColdStartFuel());
        list.add(m.getChargeFuelPercent());
        list.add(m.getChargeFuel());
        list.add(m.getLeakFuelPercent());
        list.add(m.getLeakFuel());
        list.add(m.getGasStabilityNumber());
        list.add(m.getGasStabilityDuration());
        list.add(m.getGasOpenPercentSum());
        list.add(m.getGasOpenPercentCount());
        list.add(m.getSpeedRange01Mileage());
        list.add(m.getSpeedRange01Duration());
        list.add(m.getSpeedRange01Fuel());
        list.add(m.getSpeedRange02Mileage());
        list.add(m.getSpeedRange02Duration());
        list.add(m.getSpeedRange02Fuel());
        list.add(m.getSpeedRange03Mileage());
        list.add(m.getSpeedRange03Duration());
        list.add(m.getSpeedRange03Fuel());
        list.add(m.getSpeedRange04Mileage());
        list.add(m.getSpeedRange04Duration());
        list.add(m.getSpeedRange04Fuel());
        list.add(m.getSpeedRange05Mileage());
        list.add(m.getSpeedRange05Duration());
        list.add(m.getSpeedRange05Fuel());
        list.add(m.getSpeedRange06Mileage());
        list.add(m.getSpeedRange06Duration());
        list.add(m.getSpeedRange06Fuel());
        list.add(m.getSpeedRange07Mileage());
        list.add(m.getSpeedRange07Duration());
        list.add(m.getSpeedRange07Fuel());
        list.add(m.getSpeedRange08Mileage());
        list.add(m.getSpeedRange08Duration());
        list.add(m.getSpeedRange08Fuel());
        list.add(m.getSpeedRange09Mileage());
        list.add(m.getSpeedRange09Duration());
        list.add(m.getSpeedRange09Fuel());
        list.add(m.getSpeedRange10Mileage());
        list.add(m.getSpeedRange10Duration());
        list.add(m.getSpeedRange10Fuel());
        list.add(m.getSpeedRange11Mileage());
        list.add(m.getSpeedRange11Duration());
        list.add(m.getSpeedRange11Fuel());
        list.add(m.getSpeedRange12Mileage());
        list.add(m.getSpeedRange12Duration());
        list.add(m.getSpeedRange12Fuel());
        list.add(m.getExceedSpeedRangeMileage());
        list.add(m.getExceedSpeedRangeDuration());
        list.add(m.getExceedSpeedRangeFuel());
        list.add(m.getAssistBrakeMileage());
        list.add(m.getAssistBrakeDuration());
        list.add(m.getFatigueDrivingNumber());
        list.add(m.getParkThrottleDuration());
        list.add(m.getParkThrottleFuel());
        list.add(m.getEngineWorkDuration());
        list.add(m.getDrivingHandbrakeNumber());
        list.add(m.getDrivingHandbrakeDuration());
        list.add(m.getDrivingHandbrakeMileage());
        list.add(m.getIdleHandbrakeNumber());
        list.add(m.getIdleHandbrakeDuration());
        list.add(m.getGear01Mileage());
        list.add(m.getGear01Fuel());
        list.add(m.getGear01Duration());
        list.add(m.getGear01Number());
        list.add(m.getGear02Mileage());
        list.add(m.getGear02Fuel());
        list.add(m.getGear02Duration());
        list.add(m.getGear02Number());
        list.add(m.getGear03Mileage());
        list.add(m.getGear03Fuel());
        list.add(m.getGear03Duration());
        list.add(m.getGear03Number());
        list.add(m.getGear04Mileage());
        list.add(m.getGear04Fuel());
        list.add(m.getGear04Duration());
        list.add(m.getGear04Number());
        list.add(m.getGear05Mileage());
        list.add(m.getGear05Fuel());
        list.add(m.getGear05Duration());
        list.add(m.getGear05Number());
        list.add(m.getGear06Mileage());
        list.add(m.getGear06Fuel());
        list.add(m.getGear06Duration());
        list.add(m.getGear06Number());
        list.add(m.getGear07Mileage());
        list.add(m.getGear07Fuel());
        list.add(m.getGear07Duration());
        list.add(m.getGear07Number());
        list.add(m.getGear08Mileage());
        list.add(m.getGear08Fuel());
        list.add(m.getGear08Duration());
        list.add(m.getGear08Number());
        list.add(m.getGear09Mileage());
        list.add(m.getGear09Fuel());
        list.add(m.getGear09Duration());
        list.add(m.getGear09Number());
        list.add(m.getGear10Mileage());
        list.add(m.getGear10Fuel());
        list.add(m.getGear10Duration());
        list.add(m.getGear10Number());
        list.add(m.getGear11Mileage());
        list.add(m.getGear11Fuel());
        list.add(m.getGear11Duration());
        list.add(m.getGear11Number());
        list.add(m.getGear12Mileage());
        list.add(m.getGear12Fuel());
        list.add(m.getGear12Duration());
        list.add(m.getGear12Number());
        list.add(m.getGear13Mileage());
        list.add(m.getGear13Fuel());
        list.add(m.getGear13Duration());
        list.add(m.getGear13Number());
        list.add(m.getGear14Mileage());
        list.add(m.getGear14Fuel());
        list.add(m.getGear14Duration());
        list.add(m.getGear14Number());
        list.add(m.getGear15Mileage());
        list.add(m.getGear15Fuel());
        list.add(m.getGear15Duration());
        list.add(m.getGear15Number());
        list.add(m.getGear16Mileage());
        list.add(m.getGear16Fuel());
        list.add(m.getGear16Duration());
        list.add(m.getGear16Number());
        list.add(m.getGearOtherMileage());
        list.add(m.getGearOtherFuel());
        list.add(m.getGearOtherDuration());
        list.add(m.getGearOtherNumber());
        list.add(m.getRpmRange500Mileage());
        list.add(m.getRpmRange500Fuel());
        list.add(m.getRpmRange500Duration());
        list.add(m.getRpmRange600Mileage());
        list.add(m.getRpmRange600Fuel());
        list.add(m.getRpmRange600Duration());
        list.add(m.getRpmRange700Mileage());
        list.add(m.getRpmRange700Fuel());
        list.add(m.getRpmRange700Duration());
        list.add(m.getRpmRange800Mileage());
        list.add(m.getRpmRange800Fuel());
        list.add(m.getRpmRange800Duration());
        list.add(m.getRpmRange900Mileage());
        list.add(m.getRpmRange900Fuel());
        list.add(m.getRpmRange900Duration());
        list.add(m.getRpmRange1000Mileage());
        list.add(m.getRpmRange1000Fuel());
        list.add(m.getRpmRange1000Duration());
        list.add(m.getRpmRange1100Mileage());
        list.add(m.getRpmRange1100Fuel());
        list.add(m.getRpmRange1100Duration());
        list.add(m.getRpmRange1200Mileage());
        list.add(m.getRpmRange1200Fuel());
        list.add(m.getRpmRange1200Duration());
        list.add(m.getRpmRange1300Mileage());
        list.add(m.getRpmRange1300Fuel());
        list.add(m.getRpmRange1300Duration());
        list.add(m.getRpmRange1400Mileage());
        list.add(m.getRpmRange1400Fuel());
        list.add(m.getRpmRange1400Duration());
        list.add(m.getRpmRange1500Mileage());
        list.add(m.getRpmRange1500Fuel());
        list.add(m.getRpmRange1500Duration());
        list.add(m.getRpmRange1600Mileage());
        list.add(m.getRpmRange1600Fuel());
        list.add(m.getRpmRange1600Duration());
        list.add(m.getRpmRange1700Mileage());
        list.add(m.getRpmRange1700Fuel());
        list.add(m.getRpmRange1700Duration());
        list.add(m.getRpmRange1800Mileage());
        list.add(m.getRpmRange1800Fuel());
        list.add(m.getRpmRange1800Duration());
        list.add(m.getRpmRange1900Mileage());
        list.add(m.getRpmRange1900Fuel());
        list.add(m.getRpmRange1900Duration());
        list.add(m.getRpmRange2000Mileage());
        list.add(m.getRpmRange2000Fuel());
        list.add(m.getRpmRange2000Duration());
        list.add(m.getRpmRange2100Mileage());
        list.add(m.getRpmRange2100Fuel());
        list.add(m.getRpmRange2100Duration());
        list.add(m.getRpmRange2200Mileage());
        list.add(m.getRpmRange2200Fuel());
        list.add(m.getRpmRange2200Duration());
        list.add(m.getRpmRange2300Mileage());
        list.add(m.getRpmRange2300Fuel());
        list.add(m.getRpmRange2300Duration());
        list.add(m.getRpmRange2400Mileage());
        list.add(m.getRpmRange2400Fuel());
        list.add(m.getRpmRange2400Duration());
        list.add(m.getRpmRange2500Mileage());
        list.add(m.getRpmRange2500Fuel());
        list.add(m.getRpmRange2500Duration());
        list.add(m.getRpmRange2600Mileage());
        list.add(m.getRpmRange2600Fuel());
        list.add(m.getRpmRange2600Duration());
        list.add(m.getRpmRange2700Mileage());
        list.add(m.getRpmRange2700Fuel());
        list.add(m.getRpmRange2700Duration());
        list.add(m.getRpmRange2800Mileage());
        list.add(m.getRpmRange2800Fuel());
        list.add(m.getRpmRange2800Duration());
        list.add(m.getRpmRange2900Mileage());
        list.add(m.getRpmRange2900Fuel());
        list.add(m.getRpmRange2900Duration());
        list.add(m.getRpmRange3000Mileage());
        list.add(m.getRpmRange3000Fuel());
        list.add(m.getRpmRange3000Duration());
        list.add(m.getRpmRangeOver3000Mileage());
        list.add(m.getRpmRangeOver3000Fuel());
        list.add(m.getRpmRangeOver3000Duration());
        list.add(toJsonStr(m.getAltitudeRanges()));
        list.add(toJsonStr(m.getClockRanges()));
        list.add(m.getWorkWaterTemp50Duration());
        list.add(m.getWorkWaterTemp70Duration());
        list.add(m.getWorkWaterTemp80Duration());
        list.add(m.getWorkWaterTemp85Duration());
        list.add(m.getWorkWaterTemp90Duration());
        list.add(m.getWorkWaterTemp95Duration());
        list.add(m.getWorkWaterTemp100Duration());
        list.add(m.getWorkWaterTemp105Duration());
        list.add(m.getWorkWaterTemp110Duration());
        list.add(m.getWorkWaterTemp115Duration());
        list.add(m.getWorkWaterTemp120Duration());
        list.add(m.getWorkWaterTemp125Duration());
        list.add(m.getWorkWaterTemp130Duration());
        list.add(m.getWorkWaterTemp135Duration());
        list.add(m.getWorkWaterTemp140Duration());
        list.add(m.getWorkWaterTemp145Duration());
        list.add(m.getWorkWaterTemp150Duration());
        list.add(m.getWorkWaterTempOver150Duration());
        list.add(m.getIdleWaterTemp50Duration());
        list.add(m.getIdleWaterTemp70Duration());
        list.add(m.getIdleWaterTemp80Duration());
        list.add(m.getIdleWaterTemp85Duration());
        list.add(m.getIdleWaterTemp90Duration());
        list.add(m.getIdleWaterTemp95Duration());
        list.add(m.getIdleWaterTemp100Duration());
        list.add(m.getIdleWaterTemp105Duration());
        list.add(m.getIdleWaterTemp110Duration());
        list.add(m.getIdleWaterTemp115Duration());
        list.add(m.getIdleWaterTemp120Duration());
        list.add(m.getIdleWaterTemp125Duration());
        list.add(m.getIdleWaterTemp130Duration());
        list.add(m.getIdleWaterTemp135Duration());
        list.add(m.getIdleWaterTemp140Duration());
        list.add(m.getIdleWaterTemp145Duration());
        list.add(m.getIdleWaterTemp150Duration());
        list.add(m.getIdleWaterTempOver150Duration());
        list.add(m.getMaxWorkWaterTemp());
        list.add(m.getMinWorkWaterTemp());
        list.add(m.getWorkWaterTempSum());
        list.add(m.getWorkWaterTempCount());
        list.add(m.getMaxIdleWaterTemp());
        list.add(m.getMinIdleWaterTemp());
        list.add(m.getIdleWaterTempSum());
        list.add(m.getIdleWaterTempCount());
        list.add(m.getGasOpenPercent0Duration());
        list.add(m.getGasOpenPercent10Duration());
        list.add(m.getGasOpenPercent20Duration());
        list.add(m.getGasOpenPercent30Duration());
        list.add(m.getGasOpenPercent40Duration());
        list.add(m.getGasOpenPercent50Duration());
        list.add(m.getGasOpenPercent60Duration());
        list.add(m.getGasOpenPercent70Duration());
        list.add(m.getGasOpenPercent80Duration());
        list.add(m.getGasOpenPercent90Duration());
        list.add(m.getGasOpenPercent99Duration());
        list.add(m.getGasOpenPercent100Duration());
        list.add(m.getTorque0Duration());
        list.add(m.getTorque10Duration());
        list.add(m.getTorque20Duration());
        list.add(m.getTorque30Duration());
        list.add(m.getTorque40Duration());
        list.add(m.getTorque50Duration());
        list.add(m.getTorque60Duration());
        list.add(m.getTorque70Duration());
        list.add(m.getTorque80Duration());
        list.add(m.getTorque90Duration());
        list.add(m.getTorque99Duration());
        list.add(m.getTorque100Duration());
        list.add(m.getMaxTorque());
        list.add(m.getMinTorque());
        list.add(m.getTorqueSum());
        list.add(m.getTorqueCount());
        list.add(m.getNoIdleRpmSum());
        list.add(m.getNoIdleRpmCount());
        list.add(m.getRpmSum());
        list.add(m.getRpmCount());
        list.add(m.getMaxRpm());
        list.add(m.getMinRpm());
        list.add(m.getIat50Duration());
        list.add(m.getIat70Duration());
        list.add(m.getIat80Duration());
        list.add(m.getIat85Duration());
        list.add(m.getIat90Duration());
        list.add(m.getIat95Duration());
        list.add(m.getIat100Duration());
        list.add(m.getIat105Duration());
        list.add(m.getIat110Duration());
        list.add(m.getIat115Duration());
        list.add(m.getIat120Duration());
        list.add(m.getIat125Duration());
        list.add(m.getIat130Duration());
        list.add(m.getIat135Duration());
        list.add(m.getIat140Duration());
        list.add(m.getIat145Duration());
        list.add(m.getIat150Duration());
        list.add(m.getIatOver150Duration());
        list.add(m.getIatSum());
        list.add(m.getIatCount());
        list.add(m.getMaxIat());
        list.add(m.getMinIat());
        list.add(m.getIp50Duration());
        list.add(m.getIp60Duration());
        list.add(m.getIp70Duration());
        list.add(m.getIp80Duration());
        list.add(m.getIp90Duration());
        list.add(m.getIp100Duration());
        list.add(m.getIp110Duration());
        list.add(m.getIp120Duration());
        list.add(m.getIp130Duration());
        list.add(m.getIp140Duration());
        list.add(m.getIp150Duration());
        list.add(m.getIpOver150Duration());
        list.add(m.getIpSum());
        list.add(m.getIpCount());
        list.add(m.getMaxIp());
        list.add(m.getMinIp());
        list.add(m.getCrossCities());
        list.add(m.getSo90Number());
        list.add(m.getSo90Duration());
        list.add(m.getSo90Mileage());
        list.add(m.getSo120Number());
        list.add(m.getSo120Duration());
        list.add(m.getSo120Mileage());
        list.add(m.getSrNumber());
        list.add(m.getSrDuration());
        list.add(m.getSrMileage());
        list.add(m.getSrFuel());
        list.add(m.getLrogNumber());
        list.add(m.getLrogDuration());
        list.add(m.getLrogMileage());
        list.add(m.getLrogFuel());
        list.add(m.getHsbNumber());
        list.add(m.getHsbDuration());
        list.add(m.getHsbMileage());
        list.add(m.getCsbNumber());
        list.add(m.getCsbDuration());
        list.add(m.getCsbMileage());
        list.add(m.getClutchNumber());
        list.add(m.getClutchDuration());
        list.add(m.getClutchMileage());
        list.add(m.getSharpTurningNumber());
        list.add(m.getSharpTurningMil());
        list.add(m.getSo90Fuel());
        list.add(m.getSo120Fuel());
        list.add(m.getFatigueDrivingDuration());
        list.add(m.getPreciseFlag());
        list.add(m.getWloadType());
        list.add(toJsonStr(m.getCrossCitiesDetail()));
        //东风新增字段
        list.add(m.getFuel100KM());
        list.add(m.getAvgSpeedNoidle());
        list.add(m.getAvgSpeed());
        list.add(m.getEcoProportion());
        list.add(m.getBrakeTimes());
        //东风新增字段，急加速
        list.add(m.getSharpUpSpeed1Mileage());
        list.add(m.getSharpUpSpeed1Fuel());
        list.add(m.getSharpUpSpeed1Duration());
        list.add(m.getSharpUpSpeed1Number());
        //东风新增字段，急减速
        list.add(m.getSharpDownSpeed1Mileage());
        list.add(m.getSharpDownSpeed1Fuel());
        list.add(m.getSharpDownSpeed1Duration());
        list.add(m.getSharpDownSpeed1Number());
        //东风新增字段，急转弯
        list.add(m.getSharpTurning1Number());
        //东风新增字段，超长怠速
        list.add(m.getLongIdleFuel());
        list.add(m.getLongIdleDuration());
        list.add(m.getLongIdleNumber());
        //东风新增，冷车启动
        list.add(m.getColdRunningMileage());
        list.add(m.getColdRunningFuel());
        list.add(m.getColdRunningDuration());
        list.add(m.getColdRunningNumber());
        //东风新增，夜晚开车
        list.add(m.getNightRunningMileage());
        list.add(m.getNightRunningFuel());
        list.add(m.getNightRunningDuration());
        list.add(m.getNightRunningNumber());
        //东风新增，引擎高转速
        list.add(m.getHighRotationMileage());
        list.add(m.getHighRotationFuel());
        list.add(m.getHighRotationDuration());
        list.add(m.getHighRotationNumber());
        //东风新增，大油门
        list.add(m.getLargeGasMileage());
        list.add(m.getLargeGasFuel());
        list.add(m.getLargeGasDuration());
        list.add(m.getLargeGasNumber());
        //东风新增，全油门
        list.add(m.getFullGasMileage());
        list.add(m.getFullGasFuel());
        list.add(m.getFullGasDuration());
        list.add(m.getFullGasNumber());
        //东风新增，高速行驶
        list.add(m.getFastSpeedMileage());
        list.add(m.getFastSpeedFuel());
        list.add(m.getFastSpeedDuration());
        list.add(m.getFastSpeedNumber());
        //东风新增，空档滑行
        list.add(m.getNeutralGearCoast1Mileage());
        list.add(m.getNeutralGearCoast1Fuel());
        list.add(m.getNeutralGearCoast1Duration());
        list.add(m.getNeutralGearCoast1Number());
        //东风新增，空档滑行
        list.add(m.getFlameoutCoastMileage());
        list.add(m.getFlameoutCoastFuel());
        list.add(m.getFlameoutCoastDuration());
        list.add(m.getFlameoutCoastNumber());
        //东风新增，载重
        list.add(m.getAmtLoad());
        list.add(m.getVecuLoad());
        list.add(m.getLoadType());
        //行程打分
        list.add(m.getTotalScore());
        list.add(m.getSafeScore());
        list.add(m.getEcoScore());

        list.add(m.getGasOpenPercent0Mileage());
        list.add(m.getGasOpenPercent10Mileage());
        list.add(m.getGasOpenPercent20Mileage());
        list.add(m.getGasOpenPercent30Mileage());
        list.add(m.getGasOpenPercent40Mileage());
        list.add(m.getGasOpenPercent50Mileage());
        list.add(m.getGasOpenPercent60Mileage());
        list.add(m.getGasOpenPercent70Mileage());
        list.add(m.getGasOpenPercent80Mileage());
        list.add(m.getGasOpenPercent90Mileage());
        list.add(m.getGasOpenPercent99Mileage());
        list.add(m.getGasOpenPercent100Mileage());
        list.add(m.getGasOpenPercent0Fuel());
        list.add(m.getGasOpenPercent10Fuel());
        list.add(m.getGasOpenPercent20Fuel());
        list.add(m.getGasOpenPercent30Fuel());
        list.add(m.getGasOpenPercent40Fuel());
        list.add(m.getGasOpenPercent50Fuel());
        list.add(m.getGasOpenPercent60Fuel());
        list.add(m.getGasOpenPercent70Fuel());
        list.add(m.getGasOpenPercent80Fuel());
        list.add(m.getGasOpenPercent90Fuel());
        list.add(m.getGasOpenPercent99Fuel());
        list.add(m.getGasOpenPercent100Fuel());
        list.add(m.getTorque0Mileage());
        list.add(m.getTorque10Mileage());
        list.add(m.getTorque20Mileage());
        list.add(m.getTorque30Mileage());
        list.add(m.getTorque40Mileage());
        list.add(m.getTorque50Mileage());
        list.add(m.getTorque60Mileage());
        list.add(m.getTorque70Mileage());
        list.add(m.getTorque80Mileage());
        list.add(m.getTorque90Mileage());
        list.add(m.getTorque99Mileage());
        list.add(m.getTorque100Mileage());
        list.add(m.getTorque0Fuel());
        list.add(m.getTorque10Fuel());
        list.add(m.getTorque20Fuel());
        list.add(m.getTorque30Fuel());
        list.add(m.getTorque40Fuel());
        list.add(m.getTorque50Fuel());
        list.add(m.getTorque60Fuel());
        list.add(m.getTorque70Fuel());
        list.add(m.getTorque80Fuel());
        list.add(m.getTorque90Fuel());
        list.add(m.getTorque99Fuel());
        list.add(m.getTorque100Fuel());
        //东风 新增按仪表速度计算的怠速次数、油耗、时长字段
        list.add(m.getIdleFuelInsSpeed());
        list.add(m.getIdleDurationInsSpeed());
        list.add(m.getIdleNumberInsSpeed());

        list.add(m.getTripUrea());
        list.add(m.getUrea100km());
        list.add(m.getUreaFuelRatio());




        /*--end_row*/

        return new GenericRowWithSchema(list.toArray(), schema);
    }

    public static String toJsonStr(Object m) {
        if (m == null) {
            return null;
        }

        try {
            if (m instanceof Enum) {
                Enum m1 = (Enum) m;
                return m1.name();
            }
            return JsonUtils.toJsonIgnoreNull(m);
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }


    public static Long getLong(Row row, String key) {
        Object o = row.getAs(key);
        if (o != null) {
            return Long.valueOf(o.toString());
        }
        return null;
    }

    public static Integer getInteger(Row row, String key) {
        Object o = row.getAs(key);
        if (o != null) {
            return Integer.valueOf(o.toString());
        }
        return null;
    }
    public static Double getDouble(Row row, String key) {
        Object o = row.getAs(key);
        if (o != null) {
            return Double.valueOf(o.toString());
        }
        return null;
    }

    public static String getString(Row row, String key) {
        Object o = row.getAs(key);
        if (o != null) {
            return o.toString();
        }
        return null;
    }

    /**
     * Row转为Pojo对象
     * @param row
     * @return
     */
    public static OuterStatisticData fromRow(Row row) {
        OuterStatisticData m = new OuterStatisticData();
        /*--start_deserialization*/
        m.setUid(getLong(row,"uid"));
        m.setTid(getLong(row,"tid"));
        m.setTripId(getInteger(row,"trip_id"));
        m.setRouteStartTime(getLong(row,"route_start_time"));
        m.setRouteStartLc(getInteger(row,"route_start_lc"));
        m.setRouteStartLatitude(getInteger(row,"route_start_latitude"));
        m.setRouteStartLongitude(getInteger(row,"route_start_longitude"));
        m.setRouteStartHeight(getInteger(row,"route_start_height"));
        m.setRouteStartDirection(getInteger(row,"route_start_direction"));
        m.setRouteStartMileage(getInteger(row,"route_start_mileage"));
        m.setRouteStartFuel(getInteger(row,"route_start_fuel"));
        m.setRouteEndTime(getLong(row,"route_end_time"));
        m.setRouteEndLc(getInteger(row,"route_end_lc"));
        m.setRouteEndLatitude(getInteger(row,"route_end_latitude"));
        m.setRouteEndLongitude(getInteger(row,"route_end_longitude"));
        m.setRouteEndHeight(getInteger(row,"route_end_height"));
        m.setRouteEndDirection(getInteger(row,"route_end_direction"));
        m.setRouteEndMileage(getInteger(row,"route_end_mileage"));
        m.setRouteEndFuel(getInteger(row,"route_end_fuel"));
        m.setRouteIntegralMileage(getInteger(row,"route_integral_mileage"));
        m.setRouteIntegralFuel(getInteger(row,"route_integral_fuel"));
        m.setTripPower(getInteger(row,"trip_power"));
        m.setStype(getInteger(row,"stype"));
        m.setTripMileage(getInteger(row,"trip_mileage"));
        m.setTripFuel(getInteger(row,"trip_fuel"));
        m.setTripDuration(getInteger(row,"trip_duration"));
        m.setRouteStopFlag(getInteger(row,"route_stop_flag"));
        m.setCrossDayFlag(getInteger(row,"cross_day_flag"));
        m.setForceEndFlag(getInteger(row,"force_end_flag"));
        m.setMaxSpeed(getInteger(row,"max_speed"));
        m.setMinSpeed(getInteger(row,"min_speed"));
        m.setMaxUsefulSpeed(getInteger(row,"max_useful_speed"));
        m.setMinUsefulSpeed(getInteger(row,"min_useful_speed"));
        m.setInGearCoastMileage(getInteger(row,"in_gear_coast_mileage"));
        m.setInGearCoastDuration(getInteger(row,"in_gear_coast_duration"));
        m.setInGearCoastNumber(getInteger(row,"in_gear_coast_number"));
        m.setBrakeNumber(getInteger(row,"brake_number"));
        m.setBrakeMileage(getInteger(row,"brake_mileage"));
        m.setBrakeDuration(getInteger(row,"brake_duration"));
        m.setVehicleEstimatedLoad(getInteger(row,"vehicle_estimated_load"));
        m.setNeutralGearCoastDuration(getInteger(row,"neutral_gear_coast_duration"));
        m.setNeutralGearCoastFuel(getInteger(row,"neutral_gear_coast_fuel"));
        m.setNeutralGearCoastMileage(getInteger(row,"neutral_gear_coast_mileage"));
        m.setNeutralGearCoastNumber(getInteger(row,"neutral_gear_coast_number"));
        m.setIdleFuel(getInteger(row,"idle_fuel"));
        m.setIdleDuration(getInteger(row,"idle_duration"));
        m.setIdleNumber(getInteger(row,"idle_number"));
        m.setParkingPowerOnDuration(getInteger(row,"parking_power_on_duration"));
        m.setCityDrivingMileage(getInteger(row,"city_driving_mileage"));
        m.setCityDrivingDuration(getInteger(row,"city_driving_duration"));
        m.setCityDrivingFuel(getInteger(row,"city_driving_fuel"));
        m.setRuralDrivingMileage(getInteger(row,"rural_driving_mileage"));
        m.setRuralDrivingDuration(getInteger(row,"rural_driving_duration"));
        m.setRuralDrivingFuel(getInteger(row,"rural_driving_fuel"));
        m.setEcoDrivingMileage(getInteger(row,"eco_driving_mileage"));
        m.setEcoDrivingDuration(getInteger(row,"eco_driving_duration"));
        m.setEcoDrivingFuel(getInteger(row,"eco_driving_fuel"));
        m.setUpSlopeDrivingMileage(getInteger(row,"up_slope_driving_mileage"));
        m.setUpSlopeDrivingDuration(getInteger(row,"up_slope_driving_duration"));
        m.setUpSlopeDrivingFuel(getInteger(row,"up_slope_driving_fuel"));
        m.setDownSlopeDrivingMileage(getInteger(row,"down_slope_driving_mileage"));
        m.setDownSlopeDrivingDuration(getInteger(row,"down_slope_driving_duration"));
        m.setDownSlopeDrivingFuel(getInteger(row,"down_slope_driving_fuel"));
        m.setLevelRoadDrivingMileage(getInteger(row,"level_road_driving_mileage"));
        m.setLevelRoadDrivingDuration(getInteger(row,"level_road_driving_duration"));
        m.setLevelRoadDrivingFuel(getInteger(row,"level_road_driving_fuel"));
        m.setCruiseMileage(getInteger(row,"cruise_mileage"));
        m.setCruiseDuration(getInteger(row,"cruise_duration"));
        m.setCruiseFuel(getInteger(row,"cruise_fuel"));
        m.setShiftGearsNumber(getInteger(row,"shift_gears_number"));
        m.setSharpDownSpeedDuration(getInteger(row,"sharp_down_speed_duration"));
        m.setSharpDownSpeedMileage(getInteger(row,"sharp_down_speed_mileage"));
        m.setSharpDownSpeedNumber(getInteger(row,"sharp_down_speed_number"));
        m.setSharpUpSpeedDuration(getInteger(row,"sharp_up_speed_duration"));
        m.setSharpUpSpeedMileage(getInteger(row,"sharp_up_speed_mileage"));
        m.setSharpUpSpeedNumber(getInteger(row,"sharp_up_speed_number"));
        m.setSharpUpSpeedFuel(getInteger(row,"sharp_up_speed_fuel"));
        m.setSharpStepOnGasMileage(getInteger(row,"sharp_step_on_gas_mileage"));
        m.setSharpStepOnGasDuration(getInteger(row,"sharp_step_on_gas_duration"));
        m.setSharpStepOnGasFuel(getInteger(row,"sharp_step_on_gas_fuel"));
        m.setSharpStepOnGasNumber(getInteger(row,"sharp_step_on_gas_number"));
        m.setVehicleParkNumber(getInteger(row,"vehicle_park_number"));
        m.setVehicleStartNumber(getInteger(row,"vehicle_start_number"));
        m.setVehicleStartMileage(getInteger(row,"vehicle_start_mileage"));
        m.setVehicleStartDuration(getInteger(row,"vehicle_start_duration"));
        m.setVehicleStartFuel(getInteger(row,"vehicle_start_fuel"));
        m.setVehicleColdStartNumber(getInteger(row,"vehicle_cold_start_number"));
        m.setVehicleColdStartMileage(getInteger(row,"vehicle_cold_start_mileage"));
        m.setVehicleColdStartDuration(getInteger(row,"vehicle_cold_start_duration"));
        m.setVehicleColdStartFuel(getInteger(row,"vehicle_cold_start_fuel"));
        m.setChargeFuelPercent(getInteger(row,"charge_fuel_percent"));
        m.setChargeFuel(getInteger(row,"charge_fuel"));
        m.setLeakFuelPercent(getInteger(row,"leak_fuel_percent"));
        m.setLeakFuel(getInteger(row,"leak_fuel"));
        m.setGasStabilityNumber(getInteger(row,"gas_stability_number"));
        m.setGasStabilityDuration(getInteger(row,"gas_stability_duration"));
        m.setGasOpenPercentSum(getLong(row,"gas_open_percent_sum"));
        m.setGasOpenPercentCount(getInteger(row,"gas_open_percent_count"));
        m.setSpeedRange01Mileage(getInteger(row,"speed_range01_mileage"));
        m.setSpeedRange01Duration(getInteger(row,"speed_range01_duration"));
        m.setSpeedRange01Fuel(getInteger(row,"speed_range01_fuel"));
        m.setSpeedRange02Mileage(getInteger(row,"speed_range02_mileage"));
        m.setSpeedRange02Duration(getInteger(row,"speed_range02_duration"));
        m.setSpeedRange02Fuel(getInteger(row,"speed_range02_fuel"));
        m.setSpeedRange03Mileage(getInteger(row,"speed_range03_mileage"));
        m.setSpeedRange03Duration(getInteger(row,"speed_range03_duration"));
        m.setSpeedRange03Fuel(getInteger(row,"speed_range03_fuel"));
        m.setSpeedRange04Mileage(getInteger(row,"speed_range04_mileage"));
        m.setSpeedRange04Duration(getInteger(row,"speed_range04_duration"));
        m.setSpeedRange04Fuel(getInteger(row,"speed_range04_fuel"));
        m.setSpeedRange05Mileage(getInteger(row,"speed_range05_mileage"));
        m.setSpeedRange05Duration(getInteger(row,"speed_range05_duration"));
        m.setSpeedRange05Fuel(getInteger(row,"speed_range05_fuel"));
        m.setSpeedRange06Mileage(getInteger(row,"speed_range06_mileage"));
        m.setSpeedRange06Duration(getInteger(row,"speed_range06_duration"));
        m.setSpeedRange06Fuel(getInteger(row,"speed_range06_fuel"));
        m.setSpeedRange07Mileage(getInteger(row,"speed_range07_mileage"));
        m.setSpeedRange07Duration(getInteger(row,"speed_range07_duration"));
        m.setSpeedRange07Fuel(getInteger(row,"speed_range07_fuel"));
        m.setSpeedRange08Mileage(getInteger(row,"speed_range08_mileage"));
        m.setSpeedRange08Duration(getInteger(row,"speed_range08_duration"));
        m.setSpeedRange08Fuel(getInteger(row,"speed_range08_fuel"));
        m.setSpeedRange09Mileage(getInteger(row,"speed_range09_mileage"));
        m.setSpeedRange09Duration(getInteger(row,"speed_range09_duration"));
        m.setSpeedRange09Fuel(getInteger(row,"speed_range09_fuel"));
        m.setSpeedRange10Mileage(getInteger(row,"speed_range10_mileage"));
        m.setSpeedRange10Duration(getInteger(row,"speed_range10_duration"));
        m.setSpeedRange10Fuel(getInteger(row,"speed_range10_fuel"));
        m.setSpeedRange11Mileage(getInteger(row,"speed_range11_mileage"));
        m.setSpeedRange11Duration(getInteger(row,"speed_range11_duration"));
        m.setSpeedRange11Fuel(getInteger(row,"speed_range11_fuel"));
        m.setSpeedRange12Mileage(getInteger(row,"speed_range12_mileage"));
        m.setSpeedRange12Duration(getInteger(row,"speed_range12_duration"));
        m.setSpeedRange12Fuel(getInteger(row,"speed_range12_fuel"));
        m.setExceedSpeedRangeMileage(getInteger(row,"exceed_speed_range_mileage"));
        m.setExceedSpeedRangeDuration(getInteger(row,"exceed_speed_range_duration"));
        m.setExceedSpeedRangeFuel(getInteger(row,"exceed_speed_range_fuel"));
        m.setAssistBrakeMileage(getInteger(row,"assist_brake_mileage"));
        m.setAssistBrakeDuration(getInteger(row,"assist_brake_duration"));
        m.setFatigueDrivingNumber(getInteger(row,"fatigue_driving_number"));
        m.setParkThrottleDuration(getInteger(row,"park_throttle_duration"));
        m.setParkThrottleFuel(getInteger(row,"park_throttle_fuel"));
        m.setEngineWorkDuration(getInteger(row,"engine_work_duration"));
        m.setDrivingHandbrakeNumber(getInteger(row,"driving_handbrake_number"));
        m.setDrivingHandbrakeDuration(getInteger(row,"driving_handbrake_duration"));
        m.setDrivingHandbrakeMileage(getInteger(row,"driving_handbrake_mileage"));
        m.setIdleHandbrakeNumber(getInteger(row,"idle_handbrake_number"));
        m.setIdleHandbrakeDuration(getInteger(row,"idle_handbrake_duration"));
        m.setGear01Mileage(getInteger(row,"gear01_mileage"));
        m.setGear01Fuel(getInteger(row,"gear01_fuel"));
        m.setGear01Duration(getInteger(row,"gear01_duration"));
        m.setGear01Number(getInteger(row,"gear01_number"));
        m.setGear02Mileage(getInteger(row,"gear02_mileage"));
        m.setGear02Fuel(getInteger(row,"gear02_fuel"));
        m.setGear02Duration(getInteger(row,"gear02_duration"));
        m.setGear02Number(getInteger(row,"gear02_number"));
        m.setGear03Mileage(getInteger(row,"gear03_mileage"));
        m.setGear03Fuel(getInteger(row,"gear03_fuel"));
        m.setGear03Duration(getInteger(row,"gear03_duration"));
        m.setGear03Number(getInteger(row,"gear03_number"));
        m.setGear04Mileage(getInteger(row,"gear04_mileage"));
        m.setGear04Fuel(getInteger(row,"gear04_fuel"));
        m.setGear04Duration(getInteger(row,"gear04_duration"));
        m.setGear04Number(getInteger(row,"gear04_number"));
        m.setGear05Mileage(getInteger(row,"gear05_mileage"));
        m.setGear05Fuel(getInteger(row,"gear05_fuel"));
        m.setGear05Duration(getInteger(row,"gear05_duration"));
        m.setGear05Number(getInteger(row,"gear05_number"));
        m.setGear06Mileage(getInteger(row,"gear06_mileage"));
        m.setGear06Fuel(getInteger(row,"gear06_fuel"));
        m.setGear06Duration(getInteger(row,"gear06_duration"));
        m.setGear06Number(getInteger(row,"gear06_number"));
        m.setGear07Mileage(getInteger(row,"gear07_mileage"));
        m.setGear07Fuel(getInteger(row,"gear07_fuel"));
        m.setGear07Duration(getInteger(row,"gear07_duration"));
        m.setGear07Number(getInteger(row,"gear07_number"));
        m.setGear08Mileage(getInteger(row,"gear08_mileage"));
        m.setGear08Fuel(getInteger(row,"gear08_fuel"));
        m.setGear08Duration(getInteger(row,"gear08_duration"));
        m.setGear08Number(getInteger(row,"gear08_number"));
        m.setGear09Mileage(getInteger(row,"gear09_mileage"));
        m.setGear09Fuel(getInteger(row,"gear09_fuel"));
        m.setGear09Duration(getInteger(row,"gear09_duration"));
        m.setGear09Number(getInteger(row,"gear09_number"));
        m.setGear10Mileage(getInteger(row,"gear10_mileage"));
        m.setGear10Fuel(getInteger(row,"gear10_fuel"));
        m.setGear10Duration(getInteger(row,"gear10_duration"));
        m.setGear10Number(getInteger(row,"gear10_number"));
        m.setGear11Mileage(getInteger(row,"gear11_mileage"));
        m.setGear11Fuel(getInteger(row,"gear11_fuel"));
        m.setGear11Duration(getInteger(row,"gear11_duration"));
        m.setGear11Number(getInteger(row,"gear11_number"));
        m.setGear12Mileage(getInteger(row,"gear12_mileage"));
        m.setGear12Fuel(getInteger(row,"gear12_fuel"));
        m.setGear12Duration(getInteger(row,"gear12_duration"));
        m.setGear12Number(getInteger(row,"gear12_number"));
        m.setGear13Mileage(getInteger(row,"gear13_mileage"));
        m.setGear13Fuel(getInteger(row,"gear13_fuel"));
        m.setGear13Duration(getInteger(row,"gear13_duration"));
        m.setGear13Number(getInteger(row,"gear13_number"));
        m.setGear14Mileage(getInteger(row,"gear14_mileage"));
        m.setGear14Fuel(getInteger(row,"gear14_fuel"));
        m.setGear14Duration(getInteger(row,"gear14_duration"));
        m.setGear14Number(getInteger(row,"gear14_number"));
        m.setGear15Mileage(getInteger(row,"gear15_mileage"));
        m.setGear15Fuel(getInteger(row,"gear15_fuel"));
        m.setGear15Duration(getInteger(row,"gear15_duration"));
        m.setGear15Number(getInteger(row,"gear15_number"));
        m.setGear16Mileage(getInteger(row,"gear16_mileage"));
        m.setGear16Fuel(getInteger(row,"gear16_fuel"));
        m.setGear16Duration(getInteger(row,"gear16_duration"));
        m.setGear16Number(getInteger(row,"gear16_number"));
        m.setGearOtherMileage(getInteger(row,"gear_other_mileage"));
        m.setGearOtherFuel(getInteger(row,"gear_other_fuel"));
        m.setGearOtherDuration(getInteger(row,"gear_other_duration"));
        m.setGearOtherNumber(getInteger(row,"gear_other_number"));
        m.setRpmRange500Mileage(getInteger(row,"rpm_range500_mileage"));
        m.setRpmRange500Fuel(getInteger(row,"rpm_range500_fuel"));
        m.setRpmRange500Duration(getInteger(row,"rpm_range500_duration"));
        m.setRpmRange600Mileage(getInteger(row,"rpm_range600_mileage"));
        m.setRpmRange600Fuel(getInteger(row,"rpm_range600_fuel"));
        m.setRpmRange600Duration(getInteger(row,"rpm_range600_duration"));
        m.setRpmRange700Mileage(getInteger(row,"rpm_range700_mileage"));
        m.setRpmRange700Fuel(getInteger(row,"rpm_range700_fuel"));
        m.setRpmRange700Duration(getInteger(row,"rpm_range700_duration"));
        m.setRpmRange800Mileage(getInteger(row,"rpm_range800_mileage"));
        m.setRpmRange800Fuel(getInteger(row,"rpm_range800_fuel"));
        m.setRpmRange800Duration(getInteger(row,"rpm_range800_duration"));
        m.setRpmRange900Mileage(getInteger(row,"rpm_range900_mileage"));
        m.setRpmRange900Fuel(getInteger(row,"rpm_range900_fuel"));
        m.setRpmRange900Duration(getInteger(row,"rpm_range900_duration"));
        m.setRpmRange1000Mileage(getInteger(row,"rpm_range1000_mileage"));
        m.setRpmRange1000Fuel(getInteger(row,"rpm_range1000_fuel"));
        m.setRpmRange1000Duration(getInteger(row,"rpm_range1000_duration"));
        m.setRpmRange1100Mileage(getInteger(row,"rpm_range1100_mileage"));
        m.setRpmRange1100Fuel(getInteger(row,"rpm_range1100_fuel"));
        m.setRpmRange1100Duration(getInteger(row,"rpm_range1100_duration"));
        m.setRpmRange1200Mileage(getInteger(row,"rpm_range1200_mileage"));
        m.setRpmRange1200Fuel(getInteger(row,"rpm_range1200_fuel"));
        m.setRpmRange1200Duration(getInteger(row,"rpm_range1200_duration"));
        m.setRpmRange1300Mileage(getInteger(row,"rpm_range1300_mileage"));
        m.setRpmRange1300Fuel(getInteger(row,"rpm_range1300_fuel"));
        m.setRpmRange1300Duration(getInteger(row,"rpm_range1300_duration"));
        m.setRpmRange1400Mileage(getInteger(row,"rpm_range1400_mileage"));
        m.setRpmRange1400Fuel(getInteger(row,"rpm_range1400_fuel"));
        m.setRpmRange1400Duration(getInteger(row,"rpm_range1400_duration"));
        m.setRpmRange1500Mileage(getInteger(row,"rpm_range1500_mileage"));
        m.setRpmRange1500Fuel(getInteger(row,"rpm_range1500_fuel"));
        m.setRpmRange1500Duration(getInteger(row,"rpm_range1500_duration"));
        m.setRpmRange1600Mileage(getInteger(row,"rpm_range1600_mileage"));
        m.setRpmRange1600Fuel(getInteger(row,"rpm_range1600_fuel"));
        m.setRpmRange1600Duration(getInteger(row,"rpm_range1600_duration"));
        m.setRpmRange1700Mileage(getInteger(row,"rpm_range1700_mileage"));
        m.setRpmRange1700Fuel(getInteger(row,"rpm_range1700_fuel"));
        m.setRpmRange1700Duration(getInteger(row,"rpm_range1700_duration"));
        m.setRpmRange1800Mileage(getInteger(row,"rpm_range1800_mileage"));
        m.setRpmRange1800Fuel(getInteger(row,"rpm_range1800_fuel"));
        m.setRpmRange1800Duration(getInteger(row,"rpm_range1800_duration"));
        m.setRpmRange1900Mileage(getInteger(row,"rpm_range1900_mileage"));
        m.setRpmRange1900Fuel(getInteger(row,"rpm_range1900_fuel"));
        m.setRpmRange1900Duration(getInteger(row,"rpm_range1900_duration"));
        m.setRpmRange2000Mileage(getInteger(row,"rpm_range2000_mileage"));
        m.setRpmRange2000Fuel(getInteger(row,"rpm_range2000_fuel"));
        m.setRpmRange2000Duration(getInteger(row,"rpm_range2000_duration"));
        m.setRpmRange2100Mileage(getInteger(row,"rpm_range2100_mileage"));
        m.setRpmRange2100Fuel(getInteger(row,"rpm_range2100_fuel"));
        m.setRpmRange2100Duration(getInteger(row,"rpm_range2100_duration"));
        m.setRpmRange2200Mileage(getInteger(row,"rpm_range2200_mileage"));
        m.setRpmRange2200Fuel(getInteger(row,"rpm_range2200_fuel"));
        m.setRpmRange2200Duration(getInteger(row,"rpm_range2200_duration"));
        m.setRpmRange2300Mileage(getInteger(row,"rpm_range2300_mileage"));
        m.setRpmRange2300Fuel(getInteger(row,"rpm_range2300_fuel"));
        m.setRpmRange2300Duration(getInteger(row,"rpm_range2300_duration"));
        m.setRpmRange2400Mileage(getInteger(row,"rpm_range2400_mileage"));
        m.setRpmRange2400Fuel(getInteger(row,"rpm_range2400_fuel"));
        m.setRpmRange2400Duration(getInteger(row,"rpm_range2400_duration"));
        m.setRpmRange2500Mileage(getInteger(row,"rpm_range2500_mileage"));
        m.setRpmRange2500Fuel(getInteger(row,"rpm_range2500_fuel"));
        m.setRpmRange2500Duration(getInteger(row,"rpm_range2500_duration"));
        m.setRpmRange2600Mileage(getInteger(row,"rpm_range2600_mileage"));
        m.setRpmRange2600Fuel(getInteger(row,"rpm_range2600_fuel"));
        m.setRpmRange2600Duration(getInteger(row,"rpm_range2600_duration"));
        m.setRpmRange2700Mileage(getInteger(row,"rpm_range2700_mileage"));
        m.setRpmRange2700Fuel(getInteger(row,"rpm_range2700_fuel"));
        m.setRpmRange2700Duration(getInteger(row,"rpm_range2700_duration"));
        m.setRpmRange2800Mileage(getInteger(row,"rpm_range2800_mileage"));
        m.setRpmRange2800Fuel(getInteger(row,"rpm_range2800_fuel"));
        m.setRpmRange2800Duration(getInteger(row,"rpm_range2800_duration"));
        m.setRpmRange2900Mileage(getInteger(row,"rpm_range2900_mileage"));
        m.setRpmRange2900Fuel(getInteger(row,"rpm_range2900_fuel"));
        m.setRpmRange2900Duration(getInteger(row,"rpm_range2900_duration"));
        m.setRpmRange3000Mileage(getInteger(row,"rpm_range3000_mileage"));
        m.setRpmRange3000Fuel(getInteger(row,"rpm_range3000_fuel"));
        m.setRpmRange3000Duration(getInteger(row,"rpm_range3000_duration"));
        m.setRpmRangeOver3000Mileage(getInteger(row,"rpm_range_over3000_mileage"));
        m.setRpmRangeOver3000Duration(getInteger(row,"rpm_range_over3000_duration"));
        m.setRpmRangeOver3000Fuel(getInteger(row,"rpm_range_over3000_fuel"));
        //ignore set setAltitudeRanges 
        //ignore set setClockRanges 
        m.setWorkWaterTemp50Duration(getInteger(row,"work_water_temp50_duration"));
        m.setWorkWaterTemp70Duration(getInteger(row,"work_water_temp70_duration"));
        m.setWorkWaterTemp80Duration(getInteger(row,"work_water_temp80_duration"));
        m.setWorkWaterTemp85Duration(getInteger(row,"work_water_temp85_duration"));
        m.setWorkWaterTemp90Duration(getInteger(row,"work_water_temp90_duration"));
        m.setWorkWaterTemp95Duration(getInteger(row,"work_water_temp95_duration"));
        m.setWorkWaterTemp100Duration(getInteger(row,"work_water_temp100_duration"));
        m.setWorkWaterTemp105Duration(getInteger(row,"work_water_temp105_duration"));
        m.setWorkWaterTemp110Duration(getInteger(row,"work_water_temp110_duration"));
        m.setWorkWaterTemp115Duration(getInteger(row,"work_water_temp115_duration"));
        m.setWorkWaterTemp120Duration(getInteger(row,"work_water_temp120_duration"));
        m.setWorkWaterTemp125Duration(getInteger(row,"work_water_temp125_duration"));
        m.setWorkWaterTemp130Duration(getInteger(row,"work_water_temp130_duration"));
        m.setWorkWaterTemp135Duration(getInteger(row,"work_water_temp135_duration"));
        m.setWorkWaterTemp140Duration(getInteger(row,"work_water_temp140_duration"));
        m.setWorkWaterTemp145Duration(getInteger(row,"work_water_temp145_duration"));
        m.setWorkWaterTemp150Duration(getInteger(row,"work_water_temp150_duration"));
        m.setWorkWaterTempOver150Duration(getInteger(row,"work_water_temp_over150_duration"));
        m.setIdleWaterTemp50Duration(getInteger(row,"idle_water_temp50_duration"));
        m.setIdleWaterTemp70Duration(getInteger(row,"idle_water_temp70_duration"));
        m.setIdleWaterTemp80Duration(getInteger(row,"idle_water_temp80_duration"));
        m.setIdleWaterTemp85Duration(getInteger(row,"idle_water_temp85_duration"));
        m.setIdleWaterTemp90Duration(getInteger(row,"idle_water_temp90_duration"));
        m.setIdleWaterTemp95Duration(getInteger(row,"idle_water_temp95_duration"));
        m.setIdleWaterTemp100Duration(getInteger(row,"idle_water_temp100_duration"));
        m.setIdleWaterTemp105Duration(getInteger(row,"idle_water_temp105_duration"));
        m.setIdleWaterTemp110Duration(getInteger(row,"idle_water_temp110_duration"));
        m.setIdleWaterTemp115Duration(getInteger(row,"idle_water_temp115_duration"));
        m.setIdleWaterTemp120Duration(getInteger(row,"idle_water_temp120_duration"));
        m.setIdleWaterTemp125Duration(getInteger(row,"idle_water_temp125_duration"));
        m.setIdleWaterTemp130Duration(getInteger(row,"idle_water_temp130_duration"));
        m.setIdleWaterTemp135Duration(getInteger(row,"idle_water_temp135_duration"));
        m.setIdleWaterTemp140Duration(getInteger(row,"idle_water_temp140_duration"));
        m.setIdleWaterTemp145Duration(getInteger(row,"idle_water_temp145_duration"));
        m.setIdleWaterTemp150Duration(getInteger(row,"idle_water_temp150_duration"));
        m.setIdleWaterTempOver150Duration(getInteger(row,"idle_water_temp_over150_duration"));
        m.setMaxWorkWaterTemp(getInteger(row,"max_work_water_temp"));
        m.setMinWorkWaterTemp(getInteger(row,"min_work_water_temp"));
        m.setWorkWaterTempSum(getLong(row,"work_water_temp_sum"));
        m.setWorkWaterTempCount(getInteger(row,"work_water_temp_count"));
        m.setMaxIdleWaterTemp(getInteger(row,"max_idle_water_temp"));
        m.setMinIdleWaterTemp(getInteger(row,"min_idle_water_temp"));
        m.setIdleWaterTempSum(getLong(row,"idle_water_temp_sum"));
        m.setIdleWaterTempCount(getInteger(row,"idle_water_temp_count"));
        m.setGasOpenPercent0Duration(getInteger(row,"gas_open_percent0_duration"));
        m.setGasOpenPercent10Duration(getInteger(row,"gas_open_percent10_duration"));
        m.setGasOpenPercent20Duration(getInteger(row,"gas_open_percent20_duration"));
        m.setGasOpenPercent30Duration(getInteger(row,"gas_open_percent30_duration"));
        m.setGasOpenPercent40Duration(getInteger(row,"gas_open_percent40_duration"));
        m.setGasOpenPercent50Duration(getInteger(row,"gas_open_percent50_duration"));
        m.setGasOpenPercent60Duration(getInteger(row,"gas_open_percent60_duration"));
        m.setGasOpenPercent70Duration(getInteger(row,"gas_open_percent70_duration"));
        m.setGasOpenPercent80Duration(getInteger(row,"gas_open_percent80_duration"));
        m.setGasOpenPercent90Duration(getInteger(row,"gas_open_percent90_duration"));
        m.setGasOpenPercent99Duration(getInteger(row,"gas_open_percent99_duration"));
        m.setGasOpenPercent100Duration(getInteger(row,"gas_open_percent100_duration"));
        m.setTorque0Duration(getInteger(row,"torque0_duration"));
        m.setTorque10Duration(getInteger(row,"torque10_duration"));
        m.setTorque20Duration(getInteger(row,"torque20_duration"));
        m.setTorque30Duration(getInteger(row,"torque30_duration"));
        m.setTorque40Duration(getInteger(row,"torque40_duration"));
        m.setTorque50Duration(getInteger(row,"torque50_duration"));
        m.setTorque60Duration(getInteger(row,"torque60_duration"));
        m.setTorque70Duration(getInteger(row,"torque70_duration"));
        m.setTorque80Duration(getInteger(row,"torque80_duration"));
        m.setTorque90Duration(getInteger(row,"torque90_duration"));
        m.setTorque99Duration(getInteger(row,"torque99_duration"));
        m.setTorque100Duration(getInteger(row,"torque100_duration"));
        m.setMaxTorque(getInteger(row,"max_torque"));
        m.setMinTorque(getInteger(row,"min_torque"));
        m.setTorqueSum(getLong(row,"torque_sum"));
        m.setTorqueCount(getInteger(row,"torque_count"));
        m.setNoIdleRpmSum(getLong(row,"no_idle_rpm_sum"));
        m.setNoIdleRpmCount(getInteger(row,"no_idle_rpm_count"));
        m.setRpmSum(getLong(row,"rpm_sum"));
        m.setRpmCount(getInteger(row,"rpm_count"));
        m.setMaxRpm(getInteger(row,"max_rpm"));
        m.setMinRpm(getInteger(row,"min_rpm"));
        m.setIat50Duration(getInteger(row,"iat50_duration"));
        m.setIat70Duration(getInteger(row,"iat70_duration"));
        m.setIat80Duration(getInteger(row,"iat80_duration"));
        m.setIat85Duration(getInteger(row,"iat85_duration"));
        m.setIat90Duration(getInteger(row,"iat90_duration"));
        m.setIat95Duration(getInteger(row,"iat95_duration"));
        m.setIat100Duration(getInteger(row,"iat100_duration"));
        m.setIat105Duration(getInteger(row,"iat105_duration"));
        m.setIat110Duration(getInteger(row,"iat110_duration"));
        m.setIat115Duration(getInteger(row,"iat115_duration"));
        m.setIat120Duration(getInteger(row,"iat120_duration"));
        m.setIat125Duration(getInteger(row,"iat125_duration"));
        m.setIat130Duration(getInteger(row,"iat130_duration"));
        m.setIat135Duration(getInteger(row,"iat135_duration"));
        m.setIat140Duration(getInteger(row,"iat140_duration"));
        m.setIat145Duration(getInteger(row,"iat145_duration"));
        m.setIat150Duration(getInteger(row,"iat150_duration"));
        m.setIatOver150Duration(getInteger(row,"iat_over150_duration"));
        m.setIatSum(getLong(row,"iat_sum"));
        m.setIatCount(getInteger(row,"iat_count"));
        m.setMaxIat(getInteger(row,"max_iat"));
        m.setMinIat(getInteger(row,"min_iat"));
        m.setIp50Duration(getInteger(row,"ip50_duration"));
        m.setIp60Duration(getInteger(row,"ip60_duration"));
        m.setIp70Duration(getInteger(row,"ip70_duration"));
        m.setIp80Duration(getInteger(row,"ip80_duration"));
        m.setIp90Duration(getInteger(row,"ip90_duration"));
        m.setIp100Duration(getInteger(row,"ip100_duration"));
        m.setIp110Duration(getInteger(row,"ip110_duration"));
        m.setIp120Duration(getInteger(row,"ip120_duration"));
        m.setIp130Duration(getInteger(row,"ip130_duration"));
        m.setIp140Duration(getInteger(row,"ip140_duration"));
        m.setIp150Duration(getInteger(row,"ip150_duration"));
        m.setIpOver150Duration(getInteger(row,"ip_over150_duration"));
        m.setIpSum(getLong(row,"ip_sum"));
        m.setIpCount(getInteger(row,"ip_count"));
        m.setMaxIp(getInteger(row,"max_ip"));
        m.setMinIp(getInteger(row,"min_ip"));
        m.setCrossCities(getString(row,"cross_cities"));
        m.setSo90Number(getInteger(row,"so90_number"));
        m.setSo90Duration(getInteger(row,"so90_duration"));
        m.setSo90Mileage(getInteger(row,"so90_mileage"));
        m.setSo120Number(getInteger(row,"so120_number"));
        m.setSo120Duration(getInteger(row,"so120_duration"));
        m.setSo120Mileage(getInteger(row,"so120_mileage"));
        m.setSrNumber(getInteger(row,"sr_number"));
        m.setSrDuration(getInteger(row,"sr_duration"));
        m.setSrMileage(getInteger(row,"sr_mileage"));
        m.setSrFuel(getInteger(row,"sr_fuel"));
        m.setLrogNumber(getInteger(row,"lrog_number"));
        m.setLrogDuration(getInteger(row,"lrog_duration"));
        m.setLrogMileage(getInteger(row,"lrog_mileage"));
        m.setLrogFuel(getInteger(row,"lrog_fuel"));
        m.setHsbNumber(getInteger(row,"hsb_number"));
        m.setHsbDuration(getInteger(row,"hsb_duration"));
        m.setHsbMileage(getInteger(row,"hsb_mileage"));
        m.setCsbNumber(getInteger(row,"csb_number"));
        m.setCsbDuration(getInteger(row,"csb_duration"));
        m.setCsbMileage(getInteger(row,"csb_mileage"));
        m.setClutchNumber(getInteger(row,"clutch_number"));
        m.setClutchDuration(getInteger(row,"clutch_duration"));
        m.setClutchMileage(getInteger(row,"clutch_mileage"));
        m.setSharpTurningNumber(getInteger(row,"sharp_turning_number"));
        m.setSharpTurningMil(getInteger(row,"sharp_turning_mil"));
        m.setSo90Fuel(getInteger(row,"so90_fuel"));
        m.setSo120Fuel(getInteger(row,"so120_fuel"));
        m.setFatigueDrivingDuration(getInteger(row,"fatigue_driving_duration"));
        m.setPreciseFlag(getInteger(row,"precise_flag"));
        m.setWloadType(getInteger(row,"wload_type"));
        //ignore set setCityDetails
        /*--end_deserialization*/
        m.setAltitudeRanges(getRangeData(row, "altitude_ranges"));
        m.setClockRanges(getRangeData(row, "clock_ranges"));
        m.setDay(getString(row,"day"));
        String ccDetailStr=getString(row,"cross_cities_detail");
        if(StringUtils.isNotEmpty(ccDetailStr)){
            m.setCrossCitiesDetail(GsonUtils.gsonToList(ccDetailStr, InterCrossCity.class));
        }
        //东风新增字段
        m.setFuel100KM(getInteger(row, "fuel_100km"));
        m.setAvgSpeedNoidle(getInteger(row, "avg_speed_noidle"));
        m.setAvgSpeed(getInteger(row, "avg_speed"));
        m.setEcoProportion(getInteger(row, "eco_proportion"));
        m.setBrakeTimes(getInteger(row, "brake_times"));
        //东风新增，急加速
        m.setSharpUpSpeed1Mileage(getInteger(row, "sharp_up_speed1_mileage"));
        m.setSharpUpSpeed1Fuel(getInteger(row, "sharp_up_speed1_fuel"));
        m.setSharpUpSpeed1Duration(getInteger(row, "sharp_up_speed1_duration"));
        m.setSharpUpSpeed1Number(getInteger(row, "sharp_up_speed1_number"));
        //东风新增，急减速
        m.setSharpDownSpeed1Mileage(getInteger(row, "sharp_down_speed1_mileage"));
        m.setSharpDownSpeed1Fuel(getInteger(row, "sharp_down_speed1_fuel"));
        m.setSharpDownSpeed1Duration(getInteger(row, "sharp_down_speed1_duration"));
        m.setSharpDownSpeed1Number(getInteger(row, "sharp_down_speed1_number"));
        //东风新增，急转弯
        m.setSharpTurning1Number(getInteger(row, "sharp_turning1_number"));
        //东风新增，超长怠速
        m.setLongIdleFuel(getInteger(row, "long_idle_fuel"));
        m.setLongIdleDuration(getInteger(row, "long_idle_duration"));
        m.setLongIdleNumber(getInteger(row, "long_idle_number"));
        //东风新增，冷车运行
        m.setColdRunningMileage(getInteger(row, "cold_running_mileage"));
        m.setColdRunningFuel(getInteger(row, "cold_running_fuel"));
        m.setColdRunningDuration(getInteger(row, "cold_running_duration"));
        m.setColdRunningNumber(getInteger(row, "cold_running_number"));
        //东风新增，夜晚开车
        m.setNightRunningMileage(getInteger(row, "night_running_mileage"));
        m.setNightRunningFuel(getInteger(row, "night_running_fuel"));
        m.setNightRunningDuration(getInteger(row, "night_running_duration"));
        m.setNightRunningNumber(getInteger(row, "night_running_number"));
        //东风新增，引擎高转速
        m.setHighRotationMileage(getInteger(row, "high_rotation_mileage"));
        m.setHighRotationFuel(getInteger(row, "high_rotation_fuel"));
        m.setHighRotationDuration(getInteger(row, "high_rotation_duration"));
        m.setHighRotationNumber(getInteger(row, "high_rotation_number"));
        //东风新增，大油门
        m.setLargeGasMileage(getInteger(row, "large_gas_mileage"));
        m.setLargeGasFuel(getInteger(row, "large_gas_fuel"));
        m.setLargeGasDuration(getInteger(row, "large_gas_duration"));
        m.setLargeGasNumber(getInteger(row, "large_gas_number"));
        //东风新增，全油门
        m.setFullGasMileage(getInteger(row, "full_gas_mileage"));
        m.setFullGasFuel(getInteger(row, "full_gas_fuel"));
        m.setFullGasDuration(getInteger(row, "full_gas_duration"));
        m.setFullGasNumber(getInteger(row, "full_gas_number"));
        //东风新增，高速行驶
        m.setFastSpeedMileage(getInteger(row, "fast_speed_mileage"));
        m.setFastSpeedFuel(getInteger(row, "fast_speed_fuel"));
        m.setFastSpeedDuration(getInteger(row, "fast_speed_duration"));
        m.setFastSpeedNumber(getInteger(row, "fast_speed_number"));
        //东风新增，空档滑行
        m.setNeutralGearCoast1Mileage(getInteger(row, "neutral_gear_coast1_mileage"));
        m.setNeutralGearCoast1Fuel(getInteger(row, "neutral_gear_coast1_fuel"));
        m.setNeutralGearCoast1Duration(getInteger(row, "neutral_gear_coast1_duration"));
        m.setNeutralGearCoast1Number(getInteger(row, "neutral_gear_coast1_number"));
        //东风新增，熄火滑行
        m.setFlameoutCoastMileage(getInteger(row, "flameout_coast_mileage"));
        m.setFlameoutCoastFuel(getInteger(row, "flameout_coast_fuel"));
        m.setFlameoutCoastDuration(getInteger(row, "flameout_coast_duration"));
        m.setFlameoutCoastNumber(getInteger(row, "flameout_coast_number"));
        //东风新增，载重
        m.setAmtLoad(getInteger(row, "amt_load"));
        m.setVecuLoad(getInteger(row, "vecu_load"));
        m.setLoadType(getInteger(row, "load_type"));
        //行程打分
        m.setTotalScore(getInteger(row,"totalScore"));
        m.setTotalScore(getInteger(row, "safeScore"));
        m.setTotalScore(getInteger(row, "ecoScore"));

        m.setGasOpenPercent0Mileage(getInteger(row, "gasOpenPercent0Mileage"));
        m.setGasOpenPercent10Mileage(getInteger(row, "gasOpenPercent10Mileage"));
        m.setGasOpenPercent20Mileage(getInteger(row, "gasOpenPercent20Mileage"));
        m.setGasOpenPercent30Mileage(getInteger(row, "gasOpenPercent30Mileage"));
        m.setGasOpenPercent40Mileage(getInteger(row, "gasOpenPercent40Mileage"));
        m.setGasOpenPercent50Mileage(getInteger(row, "gasOpenPercent50Mileage"));
        m.setGasOpenPercent60Mileage(getInteger(row, "gasOpenPercent60Mileage"));
        m.setGasOpenPercent70Mileage(getInteger(row, "gasOpenPercent70Mileage"));
        m.setGasOpenPercent80Mileage(getInteger(row, "gasOpenPercent80Mileage"));
        m.setGasOpenPercent90Mileage(getInteger(row, "gasOpenPercent90Mileage"));
        m.setGasOpenPercent99Mileage(getInteger(row, "gasOpenPercent99Mileage"));
        m.setGasOpenPercent100Mileage(getInteger(row, "gasOpenPercent100Mileage"));
        m.setGasOpenPercent0Fuel(getInteger(row, "gasOpenPercent0Fuel"));
        m.setGasOpenPercent10Fuel(getInteger(row, "gasOpenPercent10Fuel"));
        m.setGasOpenPercent20Fuel(getInteger(row, "gasOpenPercent20Fuel"));
        m.setGasOpenPercent30Fuel(getInteger(row, "gasOpenPercent30Fuel"));
        m.setGasOpenPercent40Fuel(getInteger(row, "gasOpenPercent40Fuel"));
        m.setGasOpenPercent50Fuel(getInteger(row, "gasOpenPercent50Fuel"));
        m.setGasOpenPercent60Fuel(getInteger(row, "gasOpenPercent60Fuel"));
        m.setGasOpenPercent70Fuel(getInteger(row, "gasOpenPercent70Fuel"));
        m.setGasOpenPercent80Fuel(getInteger(row, "gasOpenPercent80Fuel"));
        m.setGasOpenPercent90Fuel(getInteger(row, "gasOpenPercent90Fuel"));
        m.setGasOpenPercent99Fuel(getInteger(row, "gasOpenPercent99Fuel"));
        m.setGasOpenPercent100Fuel(getInteger(row, "gasOpenPercent100Fuel"));
        m.setTorque0Mileage(getInteger(row, "torque0Mileage"));
        m.setTorque10Mileage(getInteger(row, "torque10Mileage"));
        m.setTorque20Mileage(getInteger(row, "torque20Mileage"));
        m.setTorque30Mileage(getInteger(row, "torque30Mileage"));
        m.setTorque40Mileage(getInteger(row, "torque40Mileage"));
        m.setTorque50Mileage(getInteger(row, "torque50Mileage"));
        m.setTorque60Mileage(getInteger(row, "torque60Mileage"));
        m.setTorque70Mileage(getInteger(row, "torque70Mileage"));
        m.setTorque80Mileage(getInteger(row, "torque80Mileage"));
        m.setTorque90Mileage(getInteger(row, "torque90Mileage"));
        m.setTorque99Mileage(getInteger(row, "torque99Mileage"));
        m.setTorque100Mileage(getInteger(row, "torque100Mileage"));
        m.setTorque0Fuel(getInteger(row, "torque0Fuel"));
        m.setTorque10Fuel(getInteger(row, "torque10Fuel"));
        m.setTorque20Fuel(getInteger(row, "torque20Fuel"));
        m.setTorque30Fuel(getInteger(row, "torque30Fuel"));
        m.setTorque40Fuel(getInteger(row, "torque40Fuel"));
        m.setTorque50Fuel(getInteger(row, "torque50Fuel"));
        m.setTorque60Fuel(getInteger(row, "torque60Fuel"));
        m.setTorque70Fuel(getInteger(row, "torque70Fuel"));
        m.setTorque80Fuel(getInteger(row, "torque80Fuel"));
        m.setTorque90Fuel(getInteger(row, "torque90Fuel"));
        m.setTorque99Fuel(getInteger(row, "torque99Fuel"));
        m.setTorque100Fuel(getInteger(row, "torque100Fuel"));
        m.setIdleFuelInsSpeed(getInteger(row,"idle_fuel_instrument_speed"));
        m.setIdleDurationInsSpeed(getInteger(row,"idle_duration_instrument_speed"));
        m.setIdleNumberInsSpeed(getInteger(row,"idle_number_instrument_speed"));
        m.setTripUrea(getInteger(row, "trip_urea"));
        m.setUrea100km(getLong(row, "urea_100km"));
        m.setUreaFuelRatio(getLong(row, "urea_fuel_ratio"));


        return m;
    }

    private static Map<Integer, InterRangeData> getRangeData(Row row, String colName) {
        String jsonStr=getString(row,colName);
        if(StringUtils.isNotEmpty(jsonStr)){
            Map<String, InterRangeData> map0= GsonUtils.gsonToMap(jsonStr);
            Map<Integer, InterRangeData> map=new LinkedHashMap<>();
            for( Map.Entry<String, InterRangeData> entry:map0.entrySet()){
                map.put(Integer.valueOf(entry.getKey()),entry.getValue());
            }
            return map;
        }
        return null;
    }

}
